'''
写一个函数 ，这个函数可以接受若干个字符串作为参数，
要求返回这些字符串中的最大公共前缀，
比如 如果输入的是:'abcacc','abcdad','abersf'
那么他们的最大公共前缀就是ab  ps:
如果没有的话就返回None。
提示1：参数的话设置不定长参数即可.
提示2：因为考虑到每个字符串长度其实都可以不一样，所以会有在循环中越界的可能。
用try可以方便的解决这些问题
'''
def pps(*args):
    # 计算所有传入参数的长度列表
    num_list = [len(one) for one in args]
    # 拿到最短字符串的下标
    min_index = num_list.index(min(num_list))
    # 将元组转为列表
    str_list = list(args)
    # 将转换列表后的最短字符串取出，赋值给min_str，则列表str_list中的值就少了最短的那个字符串
    min_str = str_list.pop(min_index)
    # 声明一个列表存放字符串中相同的元素，以便后期拼接为公共前缀
    commonality_str_num = list()
    # 遍历剔除最小字符串的剩余字符串列表
    for j in str_list:
        # 默认字符相等数为0
        str_num = 0
        # 遍历最小字符串的长度，以便用下标获取字符串中的值拿来对比
        for i in range(min(num_list)):
            # 判断字符是否不相等，不相等证明前缀已经不同
            if j[i] == min_str[i]:
                # 计算有几个字符相等
                str_num += 1
            else:
                # 如果遇到不相等就直接结束
                break
        # 将比较后的公共前缀数量加入列表
        commonality_str_num.append(str_num)

    # 获取最小的公共前缀数量，就是所有字符串的公共前缀
    min_commonality_str_num = min(commonality_str_num)

    # 判断最短字符串与列表中剩余字符串的最小公共数量是否不为0
    if min_commonality_str_num:
        # 不为0证明所有字符串存在最小公共字符串数量为min_commonality_str_num
        # 通过字符串切片获取公共前缀字符
        result = min_str[0:min_commonality_str_num]
    else:
        # 不存在公共前缀，min_commonality_str_num为0，返回None
        result = None
    return result
r = pps('basbsde','bassw','baswd')
print(r)



def func(*n):
    i=0
    while True:
        try:
            for j in range(len(n)):
                if n[j][i]!=n[j+1][i]:
                    return n[0][:i]
        except:
            if i>=len(n[j]):
                print(len(n[j]))
                return n[0][:i+1]
            pass
            i+=1
print(func('sbasbsde','bassw','baswd'))


# n=['abcd','sad']
# print(n[0][:0])
















































